VC6.0中的"<<"重载问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:18:06
error C2248: 'year' :cannot access private member declared in class 'Date'
cpp(10) : see declaration of 'year'
数据成员month,day都有与year同样的状况。
error C2593:'operator <<' is ambiguous
看到很多人说这是VC的问题,建议用#include<sostream.h>然后把using namespace std删除,可我还是调不通而且这业不是c++的风格啊,总得有解决的办法吧,高手帮帮忙!

#include<iostream>
#include<iomanip>
using namespace std;
//--------------------------------------------
class Date{
int year,month,day;
void init();
public:
Date(const string& s);
Date(int y=2000,int m=1,int d=1);
bool isLeapYear()const;
friend ostream& operator<<(ostream& o,const Date& d);
};//--------------------------------------------
void Date::init()
{ if(year>5000 || year<1 || month<1 || month>12 || day<1 || day>31)
exit(1);//停机
}//-----------------------------------------------
Date::Date(const str

把重载的函数体放在类中实现就可以了,代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
//--------------------------------------------
class Date{
public:
int year,month,day;
void init();
public:
Date(const string& s);
Date(int y=2000,int m=1,int d=1);
bool isLeapYear()const;
friend ostream& operator<<(ostream& o,const Date& d)
{

o<<setfill('0')<<setw(4)<<d.year<<"-"<<setw(2)<<d.month<<"-";
return o<<setw(2)<<d.day<<"-"<<setfill(' ');

}
};//--------------------------------------------
void Date::init()
{ if(year>5000 || year<1 || month<1 || month>12 || day<1 || day>31)
exit(1);//停机
}//-----------------------------------------------
Date::Date(const string& s)
{ year=atoi(s.substr(0,4).c_str()); <